iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 18
0

JavaScript存在的目的是為了將靜態HTML文件轉為互動式的網頁。

DOM 概觀

Document Object Model(DOM)是用來表示與操作HTML及XML文件內容的API。

<html>
    <head>
        <title>this is TITLE</title>
    </head>
    <body>
        <h1>this is h1 !</h1>
        <p>this is p</p>
    </body>
</html>
  • DOM 模型

  • 類別階層架構

選取元素

ID選取元素

使用Document物件的getElementById()
var getById= document.getElementById('idname')

name選取元素

getElementName()是由HTMLDocument類別定義,非Document物件。
getElementName()會回傳一個NodeList物件。
只有特定標籤如表單(<form>)、表單元素、<iframe>、<img>。
如果是使用在iframe,回傳的會是該頁框的Window物件,非Elelent物件
var getByName= document.getElementByName('name')

tag選取元素

使用Document物件的getElementByTagName()
getElementTagName()會回傳一個NodeList物件。

css類別選取元素

會回傳NodeList物件
var getByCssName= document.getElementByClassName('css_Class_Name')

css選擇器選取元素

使用Document物件的querrySelectorAll()會回傳NodeList物件、querrySelector()會回傳第一個符合的元素。
var getByCssSelector= document.querrySelectorAll('#id')
var getByCssSelector= document.querrySelectorAll('boyd>h1:first-child')

document結構與巡訪

有時從Document中選取了一個Element後,希望找出結構上下關係。
一個Document可視為Node物件所組成,

  • parentNode: 父節點
  • childNodes: 唯讀,類陣列物件(NodeList),表示所有子節點
  • firstChild、lastChild: 第一個與最後一個子節點
  • nextSibling、previousSibling: 節點的下一個與前一個的兄弟節點
  • nodeType: 節點類型(Document:9、Element:1、Text:3、註解(comment):8、DocumentFragment:11)
  • nodeValue: Text or comment 節點的文字內容
  • nodeName: 一個Element的tag name(大寫表示)

getElementsByName(),getElementsByTagName()回傳NodeList
document.images,document.forms回傳HTMLCollection

屬性attributes

HTML元素由一個tag及多組的key-value所組成的屬性。

document.getElementById('hplogo') google首頁

glImg.src;
// "https://www.google.com.tw/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png"
  • 利用getAttribute()、setAttribute()查詢非HTML屬性
    glImg.getAttribute('WIDTH')

  • 利用hasAttribute()、removeAttribute()檢查屬性是否存在與移除屬性
    glImg.hasAttribute('width')

Dataset屬性

HTML5提供任何屬性名稱以data-開頭(dataset attributes),被視為合法屬性,定義了元素額外的附加資料。

<div id="box" data-color="blue" data-border="2">HTML</div>
var box = document.getElementById('box');
var _color = box.dataset.color; // _color="blue"
var _border = parseFloat(box.dataset.border) // _border=2

上一篇
Day 17: Window物件
下一篇
Day 19: 使用JavaScript操作文件 (Part 2)
系列文
Javascript 犀牛本-濃縮再濃縮 提煉再提煉30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言